package movierecomending;


import java.util.HashMap;
import java.util.HashSet;
import java.util.Vector;

import org.example.comunicationInputSchema.QueryDocument.Query.Candidates;
import org.example.comunicationInputSchema.QueryDocument.Query.Candidates.Candidate;

import utils.DataBase;

import data.CandidateScore;

public class MovieFinder {

	HashMap<String,CandidateScore> candidates;
	String title;
	String[] keywords;
	String[] genre;	
	
	public MovieFinder(HashMap<String,CandidateScore> c,String t,String k,String g){	
		candidates=c;
		title=t;
		genre=g.split(";");;	
		keywords= k.split(";");
		
	}
	
	/**
	 * questa funzione prende il Titolo del film, la trova nella matrice 
	 * dei documenti e ne calcola i piu simili tra i candidati inseriti 
	 * @return
	 */
	public HashMap<String, CandidateScore> getSimilarityByTitle(MatrixInterface matrix){
	
		HashMap<String, CandidateScore> candidate=matrix.getSimilarMovie(title, candidates);
		
		return 	candidate;
	}
	
	
	
	/**
	 * questa funzione prende le parole chiave messe nella query e ne trova i documenti
	 *  piu simili nella matrice mista termini/documenti 
	 *	tra i candidati inseriti 
	 * @return
	 */
	public HashMap<Candidate,Double> getSimilarityByKeyword(MatrixInterface matrix){
	
		HashMap<Candidate,Double> result=new HashMap<Candidate,Double>(); 
			
		matrix.getSimilarKeyword(keywords,candidates);
		
		
		return result; 
	}
	
	
	
	/**
	 * questa funzione prende il genere specificato nella nella query e ne 
	 * ritrova i film con quel genere tra i candidati inseriti (tramite db)
	 * @return
	 */
	public void getSimilarityByGenre(DataBase db){
	
		HashMap<CandidateScore,Double> result=new HashMap<CandidateScore,Double>(); 
	
		CandidateScore c=null;
	
		HashSet<String> d= db.getFilmByGenre(genre);
		
			for(String s:d){ 
				if (candidates.containsKey(d))
					c= candidates.get(s);
					c.setGenrescore(1);
					candidates.put(s,c);
				}
				
			}							
	
	
	public void testFunction(){
		
		for(String c:candidates.keySet()){ 
			System.out.println(candidates.get(c).getTitle()+" "+candidates.get(c).getGenrescore());
		}		
	}
	
	

	
	
}
